package day13;

import java.util.concurrent.*;

//可周期定长线程池
public
class Demo2 {
    static volatile int i=0;
    public static
    void main(String[] args) {
        //1.支持定长的功能
//        ExecutorService es= Executors.newScheduledThreadPool(3);
//        for (int i=0;i<100;i++){
//            es.execute(()->{
//                System.out.println(Thread.currentThread().getName());
//                try {
//                    Thread.sleep(1000);
//                }catch (InterruptedException e){
//                    e.printStackTrace();
//                }
//            });
//        }
//        es.shutdown();

        //2.支持延迟任务
        ScheduledExecutorService es= Executors.newScheduledThreadPool(3);
//        es.schedule(Runnable类型,首次延迟时间,单位)
//        for (int i=0;i<10;i++){
//            es.schedule(()->{
//                System.out.println(Thread.currentThread().getName());
//                try {
//                    Thread.sleep(1000);
//                }catch (InterruptedException e){
//                    e.printStackTrace();
//                }
//            },5, TimeUnit.SECONDS);
//        }
//        es.shutdown();
        //3.支持周期任务：子类方法
//        es.scheduleAtFixedRate(Runnable类型,首次延迟时间,周期,单位)
//        es.scheduleAtFixedRate(()->{
//                System.out.println(Thread.currentThread().getName());
//        },5,3,TimeUnit.SECONDS);
//        //关闭线程池，上面的周期任务也会停止
//        try {
//            Thread.sleep(10000);
//        }catch (InterruptedException e){
//            e.printStackTrace();
//        }
//        es.shutdown();
        //案例：通过可周期定长线程池，实现烟花爆炸效果
        //点燃延迟5秒 爆炸周期2秒 一共12个烟花 发射完毕显示新年快乐
        System.out.println("点燃烟花");
        es.scheduleAtFixedRate(()->{
            if(i==0) System.out.println("开始放烟花");
            i++;
            System.out.println("正在燃放第"+i+"枚烟花");
        },5,2,TimeUnit.SECONDS);
        while (i<12){}
        System.out.println("新年快乐");
        es.shutdown();
        RejectedExecutionHandler handler=null;
    }
}
